package com.dianzhihan.cashier.model.product;

import com.dianzhihan.cashier.model.user.User;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

/**
 * @author Dianzhi Han
 * @version 1.0
 * @description: 商品实体类
 * @date 2023/2/5 13:29
 */

@Data
@Slf4j
public class Product {
    // (#{name}, #{introduce}, #{stock}, #{unit}, #{price}, #{discount})
    private Integer productId;//商品ID
    private int userId;     // 上架的用户是哪个
    private String productname;//商品名字
    private String description;//商品介绍
    private int stock;//商品库存
    private String unit;// 商品单位
    private int price;  // 数据库中保存的单位是'分',也就是用户传入的价格 * 100 的结果，所以不会有小数，整型即可
    private int discount;//商品折扣

    // 同样的准备好一个无参构造方法，给 Mybatis select 的时候使用
    public Product() {
        log.debug("model.product.Product()被mybatis调用");
    }

    public Product(User user, ProductParam param) {
        log.debug("model.product.Product(user = {}, param = {})", user, param);
        this.productId = param.getProductId() !=null ? Integer.parseInt(param.getProductId()) : null;
        this.userId = user.getUserId();
        this.productname = param.getProductname();
        this.description = param.getDescription();
        this.stock = Integer.parseInt(param.getStock());    // 如果大家传的 stock 不合法（不是整型），这一步可能抛异常
        this.unit = param.getUnit();
        this.price = (int)(Double.parseDouble(param.getPrice()) * 100); // 1）可能抛异常；2）如果传入的价格参数有小数点后二位之后，则直接丢弃
        this.discount = Integer.parseInt(param.getDiscount());  // 也可能抛异常
    }


}
